#include <stdio.h>
#include <stdlib.h>
#include "mystack.h"


void nizhi(SEQSTACK *s,datatype a[],int n);
void jinzhi(SEQSTACK *s,int n,int d);
int isHuiWen(SEQSTACK *s,int a[],int n); 
int main(int argc, char *argv[])
{
    /*
    SEQSTACK *ss;
    int i;
    datatype fanhui;
    
    ss=init_seqstack();
        
    for(i=0;i<10;i++)
        push_seqstack(ss,10*(i+1));
    printf("入栈之后栈的长度为：%d，元素为：",ss->top);        
    print_seqstack(ss);
    
    printf("栈顶元素为：%d\n",gettop_seqstack(ss));
    
    fanhui=pop_seqstack(ss);
    printf("出栈元素为：%d,之后栈的长度为：%d，元素为：",fanhui,ss->top);
    print_seqstack(ss);   
    */
    
    /*
    LINKSTACK *ls;
    int i;
    
    ls=init_linkstack();
    
    for(i=0;i<10;i++)
        push_linkstack(ls,i+1);
    
    print_linkstack(ls);
    
    printf("出栈元素为：%d\n",pop_linkstack(ls));
    print_linkstack(ls);
    
    printf("栈顶元素为：%d\n",gettop_linkstack(ls));
    */
   
   
   /*
   //测试逆置函数是否完成 
   SEQSTACK *ss;
   int b[10]={1,2,3,4,5,6,7,8,9,10},i;
   ss=init_seqstack();
   
   nizhi(ss,b,10);
   
   for(i=0;i<10;i++)
        printf("%4d",b[i]);
    printf("\n");
    */
    
    /*
    //测试进制转换函数 
    SEQSTACK *ss;
    datatype temp;
    ss=init_seqstack();
    jinzhi(ss,111111,16);
    while(!empty_seqstack(ss))
    {
        //printf("%d",pop_seqstack(ss));
        temp=pop_seqstack(ss);
        switch(temp)
        {
            case 10:putchar('A');break;
            case 11:putchar('B');break;
            case 12:putchar('C');break;
            case 13:putchar('D');break;
            case 14:putchar('E');break;
            case 15:putchar('F');break;
            default:printf("%d",temp);
        }
    }
    printf("\n");
    */
    
    
    SEQSTACK *ss;
    datatype b[]={1,2,3,4,3,2,1};
    ss=init_seqstack();
    printf("%d\n",isHuiWen(ss,b,7));
  
  system("PAUSE");	
  return 0;
}

void nizhi(SEQSTACK *s,datatype a[],int n)
{
    int i;
    for(i=0;i<n;i++)//入栈操作 
        push_seqstack(s,a[i]);
    for(i=0;i<n;i++)//出战操作 
        a[i]=pop_seqstack(s);
}

void jinzhi(SEQSTACK *s,int n,int d)
{
    while(n)
    {
        push_seqstack(s,n%d);
        n=n/d;
    }
}

int isHuiWen(SEQSTACK *s,int a[],int n)
{
    int i;
    for(i=0;i<n;i++)
    {//把数组中元素入栈
        push_seqstack(s,a[i]);
    }
    int j=0;
    while(j<n)
    {
        if(a[j]==pop_seqstack(s))
        {//如果数组中对应的元素和出栈元素相等
            j++;//比较下一个元素
            if(s->top==0)
            {//如果栈中元素都出栈，栈为空，表示是回文序列，返回true 
                return 1;
            }
        }else
        {/*如果字符序列中对应的元素和出栈元素不等，
        表示不是字符序列，没必要再比较下个元素，直接返回false*/
            return 0;
        }
    }
}



